package code07_面向对象;

public class Test08_构造方法 {
	public static void main(String[] args) {
		Dog dog1 = new Dog(); // 自动调用了构造方法
		dog1.name = "旺财";
		dog1.age = 3;
		dog1.breed = "金毛";
		dog1.show();
		System.out.println("-------------------------");

		Dog dog2 = new Dog("单向狗", 2, "舔狗"); // 调用带参的构造方法，创建对象的同时进行初始化
		dog2.show();
		System.out.println("-------------------------");

		Dog dog3 = new Dog("小强", 4);
		dog3.show();
	}
}

/*
 * 狗狗类
 */
class Dog {
	// 成员属性
	String name;
	int age;
	String breed; // 品种

	// 隐含着一个无参的构造方法（默认类中会提供）
	public Dog() {
		System.out.println("执行无参的构造方法。。。。。");
	}

	// 带三个参数的构造方法
	public Dog(String name, int age, String breed) {
		// 必须位于第一条语句
		this(name, age); // 调用当前类中的另一个构造方法
		System.out.println("执行带三个参数的构造方法。。。。。");
		// this.name = name;
		// this.age = age;
		this.breed = breed;
	}

	// 带两个参数的构造方法
	public Dog(String name, int age) {
		// this();
		System.out.println("执行带两个参数的构造方法。。。。。");
		this.name = name;
		this.age = age;
	}

	// 成员方法
	public void show() {
		System.out.println("我叫" + name + "，狗龄：" + age + "，品种：" + breed);
	}
}
